﻿/* ///////////////////////////////////////////////////////////////////////////////////
 * FormAmfUp Class
 * Criada para integrar FormUp com AMFPHP
 *
 * @author		Guilherme Almeida
 * @version		1.0
 *
 * http://code.google.com/p/formup/
 * http://www.amf-php.org/
 *
 * 
 * ////////////////////////////////////////////////////////////////////////////////////
 * Essa class faz uso de componentes que não acompanham a versão 8 do Flash, mas podem  
 * ser baixados aqui: http://www.adobe.com/products/flashremoting/downloads/components
 * ////////////////////////////////////////////////////////////////////////////////////
 */
import mx.remoting.*;
import mx.rpc.*;
import mx.utils.Delegate;
import mx.remoting.debug.NetDebug;
import flash.external.*;
//
class FlashForm.FormAmfUp extends FlashForm.FormUp {
	public var _amfGateway:String;
	public var _amfClassName:String;
	public var _amfMethod:String;
	static var service:Service;
	//
	/**
	* FormAmfUp parametros públicos //////////////////////////////////////////////////////////////////////////
	*
	* @param	_amfGateway			String		Gateway de conexão pelo PHP
	* @param	_amfClassName		String		Nome da classe no service PHP
	* @param	_amfMethod			String		Função (método) a ser chamado no envio
	*
	* Visite o site com a documentação oficial do AMFPHP [www.amf-php.org]
	*/
	function FormAmfUp() {
		super();
	}
	public function init() {
		super.init();
		//
		if (this._amfGateway) {
			this._debugData ? NetDebug.initialize() : null;
			//
			if (!this._amfClassName) {
				trace('** Error ** Especifique _amfClassName!');
			} else {
				FlashForm.FormAmfUp.service = new Service(this._amfGateway, null, this._amfClassName);
			}
		} else {
			trace("** Error ** Especifique _amfGateway!");
		}
		//
		if (this.objUpload) {
			trace("** Error ** Não é possivel usar campo com fType:'file' no FormAmfUp, apenas com FormUp!");
		}
	}
	//
	public function amfResponder(resultConect:ResultEvent):Void {
		delete resultConect.result.serviceName;
		var amfContent:Object = resultConect.result;
		this.onComplete.apply(this, [amfContent]);
	}
	//
	public function amfFault(resultConect:ResultEvent):Void {
		delete resultConect.result.serviceName;
		var amfContent:Object = resultConect.result;
		var tit = '** Error ** FormAmfUp [PHP]: ';
		var fstring = resultConect['__fault']['__faultstring'];
		var fcode = resultConect['__fault']['__faultcode'];
		var fdetail = resultConect['__fault']['__detail'];
		//
		trace(tit+fdetail);
		trace(tit+fcode);
		trace(tit+fstring);
		this.onError.apply(this, [amfContent]);
	}
	//
	public function sendForm() {
		var amfPost:Object = new Object();
		//
		for (var ind in this._arrayField) {
			var clip = this._form[this._arrayField[ind].mc];
			var pName = this._arrayField[ind].postName;
			var pClip = clip._name;
			var pValue = clip.field.text;
			//
			if (pName) {
				amfPost[pName] = pValue;
			} else {
				amfPost[pClip] = pValue;
			}
		}
		//
		var pc:PendingCall = FlashForm.FormAmfUp.service[this._amfMethod](amfPost);
		pc.responder = new RelayResponder(this, 'amfResponder', 'amfFault');
	}
}
